package main

import "fmt"

func main() {
	// 定义切片
	var s = []int{1, 2, 3, 4, 5}

	// 切片本身就是地址：在堆内存中，指向栈内存中的一个实际的数组
	fmt.Printf("%p\n", s)

	// 定义指针：指向堆内存中的切片地址，间接指向栈内存中的数组。所以切片指针指向的实际上是一个地址值，而不是数组
	var p *[]int = &s
	fmt.Printf("%p\n", *p) // 切片指针的值是切片的地址值
	fmt.Printf("%p\n", p)

	// 所以，要操作切片值，不能使用简写，只能使用一种方式
	(*p)[0] = 888888
	fmt.Println(s)
	fmt.Println(*p)
}
